package metar;

/**
 * Temperatur und Taupunkt
 * @author Michel Metzger, Java-Kurs 2013
 * @version 1.0.0
 *
 */
public class TemperatureMetar implements MetarParamInterface {

	/**
	 * Temperatur in °C
	 */
	private int	temp;
	
	/*
	 * Taupunkt in °C
	 */
	private int	dewpoint;	

	/**
	 * Originalwert aus der Metar-info
	 */
	private String origParam;

	/**
	 * Konstruktor
	 */
	public TemperatureMetar() {
		temp = 0;
		dewpoint = 0;
	}

	/**
	 * Liefert die Temperatur in ° C
	 * @return
	 */
	public int getTemp() {
		return temp;
	}

	/**
	 * Liefert den Taupunkt in ° C
	 * @return
	 */
	public int getDewpoint() {
		return dewpoint;
	}

	/**
	 * Liefert den original Parameter aus dem MetarInfo
	 * @return
	 */
	public String getOrigParam() {
		return origParam;
	}

	/**
	 * Liefert true, wenn der angegebene Parameter die Temparaturangaben enthält
	 * @param val
	 * @return
	 */
	public static boolean isValid(String val) {
		if (val == null) {
			return false;
		}

		if (val.matches("M?\\d{2}/M?\\d{2}")) {
			return true;
		}
		
		return false;
	}

	/**
	 * Holt die Temparaturangaben aus dem Parameter
	 * @return
	 * @throws MetarParseException
	 */
	@Override
	public TemperatureMetar parseParam(String val) throws MetarParseException {
		if (!isValid(val)) {
			throw new MetarParseException("Exception while parsing temperature!");
		}

		/**
		 * Sample:
		 * 09/M03 = Temperatur (9°C) und Taupunkt (M steht für negative Werte, also -3°C) 
		 */

		try {
			origParam = val;

			String[] part = val.split("/");
			if (MetarInfo.isDebugMode()) {
				for (int i = 0; i < part.length; ++i) {
					System.out.println("temp[" + i + "]=" + part[i]);
				}
			}
			
			if (part[0].toUpperCase().startsWith("M")) {
				temp = -1 * Integer.valueOf(part[0].substring(1));
			} else {
				temp = Integer.valueOf(part[0]);
			}
			
			if (MetarInfo.isDebugMode()) {
				System.out.println("*** Temperature.temp=" + temp + "° C");
			}

			if (part[1].toUpperCase().startsWith("M")) {
				dewpoint = -1 * Integer.valueOf(part[1].substring(1));
			} else {
				dewpoint = Integer.valueOf(part[1]);
			}
			
			if (MetarInfo.isDebugMode()) {
				System.out.println("*** Temperature.dewpoint=" + dewpoint + "° C");
			}
		} catch (NumberFormatException e) {
			if (MetarInfo.isDebugMode()) {
				e.printStackTrace();
			}
			throw new MetarParseException("Exception while parsing temperature/dewpoint!", e);
		}
		
		return this;
	}

}
